<?php

# 'insc_field' & 'insc_entry' table management
class Insc extends Model
{
	var $field_id = null;
	
    function Insc()
    {
        parent::Model();
    }
	
	/**
	 * Liste de tous les champs
	 */
	function all_fields()
	{
		$this->db->select('id, field_id, label, field_type, step_number')
		         ->from('insc_field')
				 ->order_by('step_number, id');
		$query = $this->db->get();
		return $query->result();
	}
	
	/**
	 * Liste de tous les champs dans une map ('key' => 'label'))
	 */
	function map_field_labels()
	{
		$fields = array();
		foreach ($this->all_fields() as $row) {
			$fields[$row->field_id] = $row->label;
		}
		return $fields;
	}
	
	/**
	 * Insère une ligne dans la table 'insc_entry' selon le set passé en paramètre
	 */
	function insc_entry_add($filled_row)
	{
		return $this->db->insert('insc_entry', $filled_row);
	}

	/**
	 * Cherche le champs avec un id égal à l'attribut field_id dans la table 'insc_field'
	 * @return true si un champs avec cet id existe, false sinon
	 */	
	function insc_field_exists()
	{
		if($this->field_id == null) return FALSE;
		$query = $this->db->get_where('insc_field', array('field_id' => $this->field_id), 1);
		return $query->num_rows() != 0 ? TRUE : FALSE;
	}
	
	/**
	 * Cherche le champs avec l'id égal à l'attribut field_id dans la table 'insc_field'
	 * @return un $row avec les champs ->id, ->field_id, ->field_type, ->step_number
	 */	
	function insc_field_getinfos()
	{
		if($this->field_id == null) return FALSE;
		$query = $this->db->get_where('insc_field', array('field_id' => $this->field_id), 1);
		return $query->row();
	}
	
	/**
	 * Récupère toutes les insc_entry d'un candidat
	 * @param id : l'id du candidat dont on veut les infos
	 * @return un $result qui est une array d'objets représentant chacun un row de insc_entry :
     *		value_int => 
     *  	value_varchar => 10/05/1988
     *  	value_text => 
     *  	value_datetime => 
     *  	value_boolean => 
     *  	field_type => varchar
     *  	field_id => date_naissance
	 *		field_label => Date de naissance
	 *		field_step_number => 1
	 */
	function insc_entry_get_by_user_id($user_id)
	{
		$user_id = intval($user_id);
		$this->db->select('entry.value_int, entry.value_varchar, entry.value_text, entry.value_datetime, entry.value_boolean, field.field_type, field.field_id, field.label as field_label, field.step_number as field_step_number')
				 ->from('insc_entry entry')
				 ->join('insc_field field', 'entry.field_id = field.id')
				 ->where('user_id', $user_id)
				 ->order_by('field.step_number, field.id');
		$query = $this->db->get();
		return $query->result();
	}
	
	function get_entry_value($entry)
	{
		switch ($entry->field_type) {
		case 'int':
			return $entry->value_int;
		case 'varchar':
			return $entry->value_varchar;
		case 'boolean':
			return $entry->value_boolean ? 'oui '.icon_tag('tick') : 'non '.icon_tag('cross');
		case 'text':
			return $entry->value_text;
		case 'datetime':
			return $entry->value_datetime;
		}
		return '<unknown entry type>';
	}
}
